Web form — complainant self-service
Four steps, no account: who you are (with an explicit anonymous option that disables tracking), what happened, which case if any (CRB or ODPP reference, optional), evidence (optional upload). Submission returns reference + PIN on a printable confirmation.
Classification into Type A or B is never asked of the complainant — they describe, staff classify. Asking teaches people to mislabel to get faster routing.
Letter / physical — clerk-captured
The clerk keys the same form on behalf of the writer, sets source = LETTER, records date_on_letter separately from received_at (postal lag is a real latency source), scans the letter as the first attachment, and prints a two-part counterfoil: reference + PIN to the complainant, stub to the file.
Where the writer left no phone or address, the system marks the complaint uncontactable — determination is still recorded, and the outcome is held for collection.